"""数据库迁移管理工具.

本模块提供数据库迁移管理功能:
1. 执行迁移脚本
2. 创建新迁移文件
3. 管理迁移版本
"""

import argparse
import sys
from pathlib import Path

from ..db_manager import DatabaseManager
from ...utils.logger import logger


def run_migrations():
    """执行数据库迁移.
    
    执行步骤:
    1. 检查数据库连接
    2. 获取迁移文件列表
    3. 按顺序执行迁移脚本
    4. 记录迁移状态
    """
    try:
        # 创建数据库管理器
        db_manager = DatabaseManager()
        
        # 检查数据库连接
        if not db_manager.check_connection():
            logger.error("无法连接到数据库")
            sys.exit(1)
        
        # 执行迁移
        if db_manager.init_database():
            logger.info("数据库迁移成功完成")
        else:
            logger.error("数据库迁移失败")
            sys.exit(1)
            
    except Exception as e:
        logger.error(f"执行迁移时发生错误: {e}")
        sys.exit(1)


def create_migration(name: str):
    """创建新的迁移文件.
    
    Args:
        name: 迁移名称
    
    创建步骤:
    1. 获取下一个版本号
    2. 生成迁移文件名
    3. 创建迁移文件
    """
    try:
        # 获取迁移目录
        migrations_dir = Path(__file__).parent
        
        # 获取下一个版本号
        existing_migrations = list(migrations_dir.glob("V*__*.sql"))
        next_version = len(existing_migrations) + 1
        
        # 创建迁移文件
        file_name = f"V{next_version}__{name}.sql"
        file_path = migrations_dir / file_name
        
        # 写入初始内容
        with open(file_path, "w") as f:
            f.write(f"-- 迁移: {name}\n")
            f.write("-- 创建时间: " + Path.ctime(file_path) + "\n\n")
            f.write("-- 在此处添加SQL语句\n")
        
        logger.info(f"创建迁移文件: {file_path}")
        
    except Exception as e:
        logger.error(f"创建迁移文件时发生错误: {e}")
        sys.exit(1)


def main():
    """主函数,处理命令行参数."""
    parser = argparse.ArgumentParser(description="数据库迁移工具")
    
    # 创建子命令解析器
    subparsers = parser.add_subparsers(dest="command", help="可用命令")
    
    # 运行迁移命令
    run_parser = subparsers.add_parser("run", help="执行数据库迁移")
    
    # 创建迁移命令
    create_parser = subparsers.add_parser("create", help="创建新的迁移文件")
    create_parser.add_argument(
        "name",
        help="迁移名称"
    )
    
    # 解析命令行参数
    args = parser.parse_args()
    
    # 执行相应的命令
    if args.command == "run":
        run_migrations()
    elif args.command == "create":
        create_migration(args.name)
    else:
        parser.print_help()


if __name__ == "__main__":
    main()